#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

//namespace hcm
//{
//	template<class T, size_t N = 10>
//	class array
//	{
//	public:
//		T& operator[](size_t index)
//		{
//			return _array[index];
//		}
//		const T& operator[](size_t index)const
//		{
//			return _array[index];
//		}
//		size_t size()
//		{
//			return _size;
//		}
//		bool empty()const
//		{
//			return _size == 0;
//		}
//
//	private:
//		T _array[N];
//		size_t _size = N;
//	};
//}
//
//int main()
//{
//	hcm::array<int,10> a1;
//	cout << a1.size() << endl;
//	cout << a1[2] << endl;
//	cout << a1.empty() << endl;
//	return 0;
//}

//namespace hcm
//{
//	class Date
//	{
//	public:
//		Date(int year, int month, int day)
//			:_year(year)
//			, _month(month)
//			, _day(day)
//		{}
//		bool operator<(const Date& d)const
//		{
//			return (_year < d._year) ||
//				(_year == d._year && _month < d._month) ||
//				(_year == d._year && _month == d._month && _day < d._day);
//		}
//	private:
//		int _year;
//		int _month;
//		int _day;
//	};
//	template<class T>
//	bool less(T left, T right)
//	{
//		return left < right;
//	}
//	
//	template<>
//	bool less<Date*>(Date* left, Date* right)
//	{
//		return *left < *right;
//	}
//}
//
//int main()
//{
//	cout << hcm::less(1, 2) << endl;
//	hcm::Date d1(2023, 7, 28);
//	hcm::Date d2(2023, 8, 28);
//	hcm::Date d3(2023, 9, 9);
//	cout << hcm::less(d1, d2) << endl;
//	cout << hcm::less(d1, d3) << endl;
//	cout << hcm::less(d3, d2) << endl;
//	
//	return 0;
//}


//namespace hcm
//{
//	template<class T1,class T2>
//	class Date
//	{
//	public:
//		Date()
//		{
//			cout << "Date<T1,T2>" << endl;
//		}
//	private:
//		T1 _d1;
//		T2 _d2;
//	};
//
//	template<>
//	class Date<int,char>
//	{
//	public:
//		Date()
//		{
//			cout << "Date<int,char>" << endl;
//		}
//	private:
//		int _d1;
//		char _d2;
//	};
//	template<class T>
//	class Date<T, char>
//	{
//	public:
//		Date()
//		{
//			cout << "Date<T, char>" << endl;
//		}
//	private:
//		T _d1;
//		char _d2;
//	};
//	template<typename T1,typename T2>
//	class Date<T1*, T2*>
//	{
//	public:
//		Date()
//		{
//			cout << "Date<T1*,T2*>" << endl;
//		}
//	private:
//		T1 _d1;
//		T2 _d2;
//	};
//	template<typename T1,typename T2>
//	class Date<T1&, T2&>
//	{
//	public:
//		Date(const T1& d1, const T2& d2)
//			:_d1(d1)
//			,_d2(d2)
//		{
//			cout << "Date<T1&, T2&>" << endl;
//		}
//	private:
//		const T1& _d1;
//		const T2& _d2;
//	};
//
//}
//
//int main()
//{
//	hcm::Date<int, int> d1;
//	hcm::Date<int, char> d2;
//	hcm::Date<char, char> d3;
//	hcm::Date<char*, int*> d4;
//	hcm::Date<int&, char&> d5(1, 'c');
//
//	return 0;
//}

namespace hcm
{
	template<class T>
	struct Less
	{
		bool operator()(const T& x, const T& y)const
		{
			return x < y;
		}
	};

	class Date
	{
	public:
		Date(int year, int month, int day)
			:_year(year)
			, _month(month)
			, _day(day)
		{}
		bool operator<(const Date& d)const
		{
			return (_year < d._year) ||
				(_year == d._year && _month < d._month) ||
				(_year == d._year && _month == d._month && _day < d._day);
		}
	private:
		int _year;
		int _month;
		int _day;
	};
}

int main()
{

	return 0;
}